package linker

import "math"

type SectionFragment struct {
	OutPutSection *MergedSection //所属的MergedSection 实现双向关联
	Offset        uint32         // 在 Section 中的 Offset
	P2Align       uint32         // 2^P2Align 表示实际的对齐量
	IsAlive       bool
}

func NewSectionFragment(m *MergedSection) *SectionFragment {
	return &SectionFragment{
		OutPutSection: m,
		Offset:        math.MaxUint32, // 表示未被初始化过
		P2Align:       0,
		IsAlive:       false,
	}
}

// GetAddr 返回 SectionFragment 的物理地址
// 即对应的 OutPutSection 的地址 + SectionFragment.Offset (自身偏移)
func (s *SectionFragment) GetAddr() uint64 {
	return s.OutPutSection.SectionHeader.Addr + uint64(s.Offset)
}
